<?php /* Smarty version Smarty-3.0.6, created on 2011-10-17 16:48:09
         compiled from "./templates/s030_1.dwt" */ ?>
<?php /*%%SmartyHeaderCode:10449526634e9bebc9c1af83-29423647%%*/if(!defined('SMARTY_DIR')) exit('no direct access allowed');
$_smarty_tpl->decodeProperties(array (
  'file_dependency' => 
  array (
    '54f8333f1d2ef4ae118a78c169d0f1ef82dedf29' => 
    array (
      0 => './templates/s030_1.dwt',
      1 => 1318841158,
      2 => 'file',
    ),
  ),
  'nocache_hash' => '10449526634e9bebc9c1af83-29423647',
  'function' => 
  array (
  ),
  'has_nocache_code' => false,
)); /*/%%SmartyHeaderCode%%*/?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<!-- TemplateBeginEditable name="doctitle" -->
<title><?php echo (($tmp = @$_smarty_tpl->getVariable('title')->value)===null||$tmp==='' ? "PHP学习笔记030" : $tmp);?>
</title>
<link href="css/style.css" rel="stylesheet" type="text/css">
<!-- TemplateEndEditable -->
<!-- TemplateBeginEditable name="head" -->
<!-- TemplateEndEditable -->
</head>
<body>
<?php $_template = new Smarty_Internal_Template("top.tpl", $_smarty_tpl->smarty, $_smarty_tpl, $_smarty_tpl->cache_id, $_smarty_tpl->compile_id, 9999, null);
$_template->assign('tip',"030 smarty模版引擎的缓存与应用"); echo $_template->getRenderedTemplate();?><?php $_template->updateParentVariables(0);?><?php unset($_template);?>
<div class="text">
<b>smarty缓存配置和应用</b>
<strong>smarty</strong>除了能做到程序和美工完全分离外，还能利用其缓存降低服务器压力。我们下面来看是如何配置smarty的缓存的<br />
<div class="code">
$smarty-&gt;cache_dir = &quot;/caches/&quot;;  //缓存目录<br />
$smarty-&gt;caching = true;  //开启缓存,为flase的时侯缓存无效<br />
$smarty-&gt;cache_lifetime = 60;  //缓存时间
</div>
这样我们的缓存就打开了，我们设置了60秒的缓存时间，也就是说当缓存建立到缓存失效只有60秒的时间，当然你可以根据自己的需求来修改它。<br />
我们在php文件中加入下面的内容<br />
<div class="code">
$smarty-&gt;assign(&quot;test1&quot;,&quot;第3个测试&quot;);<br />
</div>
我们在模板引擎中加入下面的代码<br />
<div class="code">
 
{$test1}

</div>
它运行的效果，我们通过更改php中的值来查看它的缓存是否启用了。
<div class="effect">
<?php echo $_smarty_tpl->getVariable('test1')->value;?>

</div>
</div>
<div class="text">
<b>display创建带参数的缓存</b>
我们在php文件中加入下面的内容
<div class="code">

&lt;?php<br />
if (isset($_GET['id']))<br />
{<br />
$cache_id=$_GET['id'];<br />
}<br />
else<br />
{<br />
$cache_id=&quot;没有给id值&quot;;<br />
}<br />
$smarty-&gt;assign(&quot;cacheid&quot;,$cache_id);<br />
$template=&quot;s030_1.dwt&quot;;<br />
if (isset($_GET['id']))<br />
{<br />
$id=$_GET['id'];<br />
$smarty-&gt;display($template,$id);<br />
}<br />
else<br />
{<br />
$smarty-&gt;display($template);<br />
}<br />
?&gt;

</div>
这样我们在地址栏内输入id时，就能被获取并且创建一个带参数的缓存页面，该页面根据所获得的参数创建不同的缓存。我们可以测试它
<div class="code">

{$cacheid}

</div>
我们来看合成的效果
<div class="effect">
<?php echo $_smarty_tpl->getVariable('cacheid')->value;?>

</div>
</div>

<div class="text">
<b>缓存的清除</b>
我们在php文件中使用<br />
<div class="code">
$smarty-&gt;clear_all_cache(); //清除所有缓存<br />
$smarty-&gt;clear_cache('index.htm'); //清除index.tpl的缓存<br />
$smarty-&gt;clear_cache('index.htm',cache_id); //清除指定id的缓存</div>
</div>
<div class="text">
<b>smarty局部缓存</b>
有时候页面有部分内容需要实时更新，不能使用缓存。我们会使用局部缓存来实现，我们讲解两种<br />
1<strong>insert_</strong>：函数名必须以<strong>insert_</strong>开始，后面的自由定义，使用方式为：<br />
php部分：
<div class="code">&lt;?php<br />
function insert_get_time(){<br />
return date(&quot;Y-m-d H:m:s&quot;);<br />
}<br />
?&gt;</div>
模板文件中使用
<div class="code">

{insert name="get_time"}

</div>
我们刷新页面来得到其效果
<div class="effect">
<?php echo Smarty_Internal_Nocache_Insert::compile ('insert_get_time',array(), $_smarty_tpl, 'null');?>

</div>
还有功能更强大的<strong>{smarty_block}</strong>我们以后会介绍<br />
</div>

<div class="text">
<b>mysql类和smarty类的综合使用</b>
我们进行一次综合的应用，我们在php文件中创建出自己的mysql类<br />
<div class="code">
$mysql=new mysql('localhost','study','root','','utf8');<br />
$sql=&quot;select * from `study011` where 1&quot;;<br />
$arr=$mysql-&gt;sarr($sql);<br />
$smarty-&gt;assign(&quot;text&quot;,$arr);<br />
</div>
模板文件
<div class="code">

{foreach from=$text item=v key=k}<br />
{$k}=&gt;{$v}&lt;br /&gt;<br />
{/foreach}
  
 </div>
 运行它得到：
<div class="effect">
<?php  $_smarty_tpl->tpl_vars['v'] = new Smarty_Variable;
 $_smarty_tpl->tpl_vars['k'] = new Smarty_Variable;
 $_from = $_smarty_tpl->getVariable('text')->value; if (!is_array($_from) && !is_object($_from)) { settype($_from, 'array');}
if ($_smarty_tpl->_count($_from) > 0){
    foreach ($_from as $_smarty_tpl->tpl_vars['v']->key => $_smarty_tpl->tpl_vars['v']->value){
 $_smarty_tpl->tpl_vars['k']->value = $_smarty_tpl->tpl_vars['v']->key;
?>
<?php echo $_smarty_tpl->tpl_vars['k']->value;?>
=><?php echo $_smarty_tpl->tpl_vars['v']->value;?>
<br />
<?php }} ?>
</div>
</div>

</body>
</html>
